#ifndef SMART_POINTER_HPP
#define SMART_POINTER_HPP

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

namespace Tools
{
    template <class T>
    class SmartPointer
    {
    public :
        // Constructor
        SmartPointer();
        SmartPointer(T* pointer);
        SmartPointer(const SmartPointer& copy);                
        const SmartPointer& operator =(const SmartPointer& copy);        
        // Destructor        
        ~SmartPointer();        
        // Reference operator                
        T& operator*() const;
        T* operator->() const;
        // Cast operator         
        operator T*() const;
    private :
		// Swap pointers
        void Swap(SmartPointer& pointer);
		// Attributs
        T*   object;
        int* objectCounter; 
    };    
}

#include "SmartPointer.inl"


#endif // SMART_POINTER_HPP
